package day07;

/**
 * @author: 王丹
 * @create: 2021-09-03 15:21
 * 线程t1的run()方法中有个循环，通过flag来控制循环是否结束，主线程中休眠了1秒，将flag置为false，
 * 按说此时线程t1会检测到flag为false，打印“线程t1停止了”，为何和我们期望的结果不一样呢？
 * 运行上面的代码我们可以判断，t1中看到的flag一直为true，主线程将flag置为false之后，t1线程中
 * 并没有看到，所以一直死循环。
 **/
public class Demo09 {
    public static boolean flag = true;

    public static class T1 extends Thread {
        public T1(String name) {
            super(name);
        }

        @Override
        public void run() {
            System.out.println("线程" + this.getName() + "开始");
            while (flag) {
                ;
            }
            System.out.println("线程" + this.getName() + "停止");
        }
    }

    public static void main(String[] args) throws InterruptedException {
        new T1("T1").start();
        Thread.sleep(2000);
        flag = false;
    }
}
